package com.ruoyi.system.entity;

import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson2.JSON;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.system.domain.JsonKV;
import lombok.Data;

import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;

/**
 * 履职表(SysDuty)实体类
 *
 * @since 2022-11-15 14:08:15
 */
@Data
public class SysDuty implements Serializable {
    private static final long serialVersionUID = 778568679925835477L;

    private Integer id;

    /**
     * 危险源名称
     */
    private String dangerName;
    /**
     * 内容
     */
    private String dutyInfoName;

    /**
     * 具体履职内容
     */
    private String dutyData;
    /**
     * 负责人类型
     */
    private String dutyType;
    /**
     * 是否完成
     */
    private String whetherDelete;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;


    @SuppressWarnings("all")
    public String getDutyDataByDutyType(String dutyType, String dutyData) {
        Map objectMap = JSON.parseObject(dutyData, Map.class);

        Map<String, Object> map = new HashMap<>();
        JsonKV jsonKV = new JsonKV();
        jsonKV.setKey("");
        jsonKV.setValue(DateUtil.now());
        String value = JSONUtil.toJsonStr(jsonKV);
        if (dutyType.equals("主要负责人")) {
            map.put("组织建立重大危险源安全包保责任制并指定对重大危险源负有安全包保责任的技术负责人、操作负责人", value);
            map.put("组织指定重大危险源安全生产规章制度和操作流程，并采取有效措施保证其得到执行", value);
            map.put("组织对重大危险源管理和操作岗位人员进行安全技能培训", value);
            map.put("保证重大危险源安全生产所必需的安全投入", value);
            map.put("督促、检查重大危险源安全生产工作", value);
            map.put("组织指定并实施重大危险源生产安全事故应急救援预案", value);
            map.put("组织通过危险化学品登记信息管理系统填报重大危险源有关信息，保证重大危险源安全监测监控有关数据接入危险化学品安全生产风险监测预警系统", value);
            map.forEach((k, v) -> {
                JsonKV parseObject = JSON.parseObject(v.toString(), JsonKV.class);
                Object o = objectMap.get(k);
                parseObject.setKey(o.toString());
                map.put(k, JSONUtil.toJsonStr(parseObject));
            });
        } else if (dutyType.equals("技术负责人")) {
            map.put("组织实施重大危险源安全监测监控体系，完善控制措施，保证安全监测监控系统符合国家标准或者行业标准的规定", value);
            map.put("组织定期对安全设施和监测监控系统进行监测、检验、并进行经常性维护好、保养、保证有效、可靠运行", value);
            map.put("对于超过个人和社会可容许风险值限值标准的重大危险源，组织采取相应的降低风险措施，直至风险满足可容许风险标准要求", value);
            map.put("组织审查涉及重大危险源的外来施工单位及人员的相关资质、安全管理等情况，审查涉及重大危险源的变更管理", value);
            map.put("隐患排除与治理情况", value);
            map.put("组织演练重大危险源专项应急预案和现场处置方案", value);
            map.forEach((k, v) -> {
                JsonKV parseObject = JSON.parseObject(v.toString(), JsonKV.class);
                Object o = objectMap.get(k);
                parseObject.setKey(o.toString());
                map.put(k, JSONUtil.toJsonStr(parseObject));
            });
        } else if (dutyType.equals("操作负责人")) {
            map.put("督查检查各岗位严格执行重大危险源安全生产规章制度和操作流程", value);
            map.put("对设计重大危险源的特殊作业、检维修作业等进行监督检查，督促落实作业安全管控措施", value);
            map.put("重大危险源安全风险隐患排查", value);
            map.put("重大危险源隐患治理", value);
            map.forEach((k, v) -> {
                JsonKV parseObject = JSON.parseObject(v.toString(), JsonKV.class);
                Object o = objectMap.get(k);
                parseObject.setKey(o.toString());
                map.put(k, JSONUtil.toJsonStr(parseObject));
            });
        } else {
            return null;
        }
        return JSONUtil.toJsonStr(map);
    }

    public String getDutyName(String dutyType) {
        DateTime date = DateUtil.date();
        // 当前年份
        int year = date.year();
        // 当前季度
        int quarter = date.quarter();
        // 当前月份
        int month = date.month();
        // 当年第几周
        int field = date.getField(DateField.WEEK_OF_YEAR);
        StringBuffer name = new StringBuffer();
        if (dutyType.equals("主要负责人")) {
            name.append(year);
            name.append("年");
            if (month <= 6) {
                name.append("上半年");
            } else {
                name.append("下半年");
            }
            name.append("危险源主要负责人包保责任履职");
        } else if (dutyType.equals("技术负责人")) {
            name.append(year);
            name.append("年第");
            name.append(quarter);
            name.append("季度危险源技术负责人包保责任履职");
        } else if (dutyType.equals("操作负责人")) {
            name.append(year);
            name.append("年第");
            name.append(field);
            name.append("周危险源操作负责人包保责任履职");
        } else {
            return null;
        }
        return name.toString();
    }

    public static void main(String[] args) {
        String a = "{\"对设计重大危险源的特殊作业、检维修作业等进行监督检查，督促落实作业安全管控措施\":\"23\",\"督查检查各岗位严格执行重大危险源安全生产规章制度和操作流程\":\"\",\"重大危险源安全风险隐患排查\":\"\",\"重大危险源隐患治理\":\"\"}";
        Map<String, Object> map = new HashMap<>();
        Map objectMap = JSON.parseObject(a, Map.class);
        System.out.println(JSON.toJSONString(objectMap));

    }
}

